package com.inspinia.upms.dao;

import com.inspinia.base.dao.BaseDao;
import com.inspinia.upms.common.model.org.UpmsOrganization;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by veblen on 16-1-29.
 */
public interface UpmsOrganizationDao extends BaseDao<UpmsOrganization> {
    List<UpmsOrganization> findAll();

    int countByName(@Param("name") String resourceName, @Param("id") Long resourceId, @Param("pid") Long pid);

    /**
     * 查找最小的权重值
     *
     * @param pid 父节点id
     * @param id  机构id
     * @return
     */
    Integer findMinWeights(@Param("pid") Long pid, @Param("id") Long id);

    /**
     * 根据id获取父类id
     *
     * @param id
     * @return
     */

    Long findDistResources(Long id);

    /**
     * 查找角色的所有菜单
     *
     * @param roleIds 角色id
     * @return
     */
    List<UpmsOrganization> findMenusByRole(@Param("roleIds") List<Long> roleIds);

    /**
     * 修改状态
     *
     * @param bean
     * @return
     */
    int updateStatus(UpmsOrganization bean);

    /**
     * 查找机构的子机构,只向下查询一级。不是递归查询。
     *
     * @param id 父节点id
     * @return 子节点的id集合
     */
    List<Long> findChildrenIds(Long id);

    UpmsOrganization findByUserId(@Param("userId") Long userId);

    /**
     * 获取所有机构
     *
     * @return
     */
    List<UpmsOrganization> getDep();

    /**
     * 批量删除
     *
     * @param ids id集合
     */
    void batchDelete(@Param("ids") List<Long> ids);

    /**
     * 根据id获取机构的名称
     *
     * @param orgId 机构id
     * @return
     */
    String getNameById(@Param("orgId") Long orgId);

    /**
     * 根据城市id查找该城市的机构
     *
     * @param cityId 城市id
     * @return
     */
    List<Long> findOrgIdByCityId(@Param("cityId") Long cityId);

    /**
     * 根据城市id查找该城市的机构
     *
     * @param countyId 城市id
     * @return
     */
    List<Long> findOrgIdByCountyId(@Param("countyId") Long countyId);

    /**
     * 查找组织机构所在的城市id
     *
     * @param orgIds 城市id
     * @return 城市id集合
     */
    List<Long> findCityIds(@Param("orgIds") List<Long> orgIds);

    /**
     * 根据名称进行查找
     *
     * @param orgName 机构名称
     * @return
     */
    List<Long> findOrgIdsByNames(@Param("orgName") List<String> orgName);

    /**
     * 查找所有的组织机构，并根据组织机构排除某些id
     *
     * @param excludeIds 排除
     * @return 组织机构集合
     */
    List<UpmsOrganization> findAllWithExcludeIds(@Param("excludeIds") Long[] excludeIds);

    /**
     * 根据部门id集合查找机构的id
     *
     * @param deptIds 部门id集合
     * @return 机构id集合
     */
    List<Long> findOrgIdByDeptIds(@Param("deptIds") List<Long> deptIds);

    /**
     * 通过区域查找组织
     *
     * @param provinceId
     * @param cityId
     * @param countyId
     * @return
     */
    List<UpmsOrganization> findOrganizationByArea(@Param("provinceId") Long provinceId, @Param("cityId") Long cityId, @Param("countyId") Long countyId);

    /**
     * 根据父级Id查询子组织
     *
     * @param parentId
     * @return
     */
    List<UpmsOrganization> findOrganizationByParentId(@Param("parentId") Long parentId);

    /**
     * 查找指定机构的父级机构
     *
     * @param orgId
     * @return
     */
    UpmsOrganization getParentOrg(@Param("orgId") Long orgId);

    /**
     * 查找机构的同级机构
     *
     * @param orgId
     * @return
     */
    List<UpmsOrganization> findSameLevelOrgs(@Param("orgId") Long orgId);

    /**
     * 查找用户所在市下面的机构的平级机构
     * @param firstOrgId
     * @return
     */
    List<UpmsOrganization> findSameLevelOrgAndCity(@Param("orgId") Long firstOrgId);
}
